/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Beans;

import conexion.Coneccion;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Jorge Aguilar
 */
public class ModEmp_Empleado {
    
    
    private int idempleado;
    private int fk_idcargo;
    private int fk_idpersona;
    
    
    private int fk_idusuario_crea;
    private int fk_idusuario_mod;
    private boolean eliminado;
    private String accion;
    
    
    private ModEmp_Persona persona;

    public ModEmp_Empleado() {
        this.idempleado = 0;
        this.fk_idcargo = 0;
        this.fk_idpersona = 0;
        this.fk_idusuario_crea = 0;
        this.fk_idusuario_mod = 0;
    }

    public ModEmp_Persona getPersona() {
        return persona;
    }

    public void setPersona(ModEmp_Persona persona) {
        this.persona = persona;
    }

    public int getIdempleado() {
        return idempleado;
    }

    public void setIdempleado(int idempleado) {
        this.idempleado = idempleado;
    }

    public int getFk_idcargo() {
        return fk_idcargo;
    }

    public void setFk_idcargo(int fk_idcargo) {
        this.fk_idcargo = fk_idcargo;
    }

    public int getFk_idpersona() {
        return fk_idpersona;
    }

    public void setFk_idpersona(int fk_idpersona) {
        this.fk_idpersona = fk_idpersona;
    }

    public int getFk_idusuario_crea() {
        return fk_idusuario_crea;
    }

    public void setFk_idusuario_crea(int fk_idusuario_crea) {
        this.fk_idusuario_crea = fk_idusuario_crea;
    }

    public int getFk_idusuario_mod() {
        return fk_idusuario_mod;
    }

    public void setFk_idusuario_mod(int fk_idusuario_mod) {
        this.fk_idusuario_mod = fk_idusuario_mod;
    }

    public boolean isEliminado() {
        return eliminado;
    }

    public void setEliminado(boolean eliminado) {
        this.eliminado = eliminado;
    }

    public String getAccion() {
        return accion;
    }

    public void setAccion(String accion) {
        this.accion = accion;
    }
    
    
    /* __________________________________________________________________ */
    /* ------------------------------------------------------------------ */
    public Integer operaciones(ModEmp_Empleado v) {
        String inserto;        
        CallableStatement ps = null;
        ResultSet rs= null;
        Integer id = 0;
        Connection con = Coneccion.getConexion();        
        try {
            ps = con.prepareCall("{call mante_pas_empleado_operacion(?,?,?,?,?,?)}");
            ps.setInt(1, v.getIdempleado());
            ps.setInt(2, v.getFk_idcargo());
            ps.setInt(3, v.getFk_idpersona());
            ps.setInt(4, v.getFk_idusuario_crea());
            ps.setInt(5, v.getFk_idusuario_mod());
            ps.setString(6, v.getAccion());            
            rs  = ps.executeQuery();//AQUI
            if (rs.next()) {
                if (v.getAccion().equals("U")) {
                    inserto = "La operacion fue actualizado correctamente";
                    id = rs.getInt(1);
                } else {
                    if (v.getAccion().equals("I")) {
                        inserto = "La operacion fue insertado correctamente";
                        id = rs.getInt(1);
                    } else {
                        inserto = "La operacion fue eliminado correctamente";
                        id = rs.getInt(1);
                    }
                }
            } else {
                inserto = "No se pudo insertar ";
            }
        } catch (Exception ex) {
            inserto = ex.getMessage();
            System.out.println("fallo ERROR "+ex.getMessage());            
        } finally {
            try {
                rs.close();
                ps.close();
                con.close();
            } catch (Exception ex) {
            }
        }
        return id;
    }    
    
    public ArrayList<ModEmp_Empleado> listarEmpleados()
    {   ArrayList<ModEmp_Empleado> listaE = new ArrayList<ModEmp_Empleado>();
        CallableStatement ps = null;
        ResultSet rs = null;
        Connection cn = Coneccion.getConexion();
        try
        {   
            ps = cn.prepareCall("select * from view_pas_empleado_listar_empleado");
            rs = ps.executeQuery();
            while(rs.next())
            {   ModEmp_Empleado e = new ModEmp_Empleado();
                e.setIdempleado(rs.getInt(1));
                e.setFk_idcargo(rs.getInt(2));
                e.setFk_idpersona(rs.getInt(3));
                listaE.add(e);
            }
            Coneccion.cerrarCall(ps);
            Coneccion.cerrarConexion(cn);
        } catch(SQLException e)
        {   e.printStackTrace();
            Coneccion.cerrarCall(ps);
            Coneccion.cerrarConexion(cn);
        } catch(Exception e)
        {   e.printStackTrace();
            Coneccion.cerrarCall(ps);
            Coneccion.cerrarConexion(cn);
        } finally {
            try {
                rs.close();
                ps.close();
                cn.close();
            } catch (Exception ex) {
            }
        }        
       return listaE;
    }
    
    public static ModEmp_Empleado obtenerEmpleado(int idempleado)
    {   ModEmp_Empleado em = new ModEmp_Empleado();
        CallableStatement ps = null;
        ResultSet rs = null;
        Connection cn = Coneccion.getConexion();
        try
        {   
            ps = cn.prepareCall("select * from view_pas_empleado_listar_empleado e left join pas_persona p on p.idpersona=e.fk_idpersona where idempleado=?");
            ps.setInt(1, idempleado);
            rs = ps.executeQuery();
            while(rs.next())
            {   
                ModEmp_Persona p = new ModEmp_Persona();
                em.setFk_idcargo(rs.getInt(2));
                em.setFk_idpersona(rs.getInt(3));                
                p.setIdpersona(rs.getInt(9));
                p.setNombre(rs.getString(10));
                p.setApepaterno(rs.getString(11));
                p.setApematerno(rs.getString(12));
                p.setDireccion(rs.getString(13));
                em.setPersona(p);
            }
            Coneccion.cerrarCall(ps);
            Coneccion.cerrarConexion(cn);
        } catch(SQLException e)
        {   e.printStackTrace();
            Coneccion.cerrarCall(ps);
            Coneccion.cerrarConexion(cn);
        } catch(Exception e)
        {   e.printStackTrace();
            Coneccion.cerrarCall(ps);
            Coneccion.cerrarConexion(cn);
        }finally {
            try {
                rs.close();
                ps.close();
                cn.close();
            } catch (Exception ex) {
            }
        }         
       return em;
    }    
    
    public ModEmp_Empleado listarEmpleado_One(Integer fk_idpersona) {
        ModEmp_Empleado v = new ModEmp_Empleado();
        Connection cn = null;
        PreparedStatement cl = null;
        ResultSet rs = null;
        
        try {
            //Nombre del procedimiento almacenado
            String call = "SELECT *  FROM view_pas_empleado_listar_empleado where fk_idpersona="+fk_idpersona;
            cn = Coneccion.getConexion();
            cl = cn.prepareStatement(call);          
            //La sentencia lo almacenamos en un resulset           
            rs = cl.executeQuery();
            //Consultamos si hay datos para recorrerlo
            //e insertarlo en nuestro array
            while (rs.next()) {                
                v.setIdempleado(rs.getInt(1));
                v.setFk_idcargo(rs.getInt(2));
                v.setFk_idpersona(rs.getInt(3));                
            }
           
        } catch (SQLException e) {
            e.printStackTrace();
            Coneccion.deshacerCambios(cn);
            Coneccion.cerrarConexion(cn);            
        } catch (Exception e) {
             e.printStackTrace();
            Coneccion.deshacerCambios(cn);
            Coneccion.cerrarConexion(cn);           
        }finally {
            try {
                 rs.close();
                cl.close();
                cn.close();
            } catch (Exception ex) {
            }
        }
        return v;
    }

    public ArrayList<ModEmp_Empleado> obtenerEmpleadoByIdCargo(int id)
    {   ArrayList<ModEmp_Empleado> listaE = new ArrayList<ModEmp_Empleado>();
        CallableStatement ps = null;
        ResultSet rs = null;
        Connection cn = Coneccion.getConexion();
        try
        {   
            ps = cn.prepareCall("select * from view_pas_empleado_listar_empleado where fk_idcargo=?");
            ps.setInt(1, id);
            rs = ps.executeQuery();
            while(rs.next())
            {   ModEmp_Empleado e = new ModEmp_Empleado();
                e.setIdempleado(rs.getInt(1));
                e.setFk_idcargo(rs.getInt(2));
                e.setFk_idpersona(rs.getInt(3));
                listaE.add(e);
            }
            Coneccion.cerrarCall(ps);
            Coneccion.cerrarConexion(cn);
        } catch(SQLException e)
        {   e.printStackTrace();
            Coneccion.cerrarCall(ps);
            Coneccion.cerrarConexion(cn);
        } catch(Exception e)
        {   e.printStackTrace();
            Coneccion.cerrarCall(ps);
            Coneccion.cerrarConexion(cn);
        } finally {
            try {
                rs.close();
                ps.close();
                cn.close();
            } catch (Exception ex) {
            }
        }        
       return listaE;
    }
    
    public ModEmp_Empleado obtenerEmpleadoByID(int id) {
        ModEmp_Empleado v = new ModEmp_Empleado();
        Connection cn = null;
        PreparedStatement cl = null;
        ResultSet rs = null;
        
        try {
            //Nombre del procedimiento almacenado
            String call = "SELECT *  FROM view_pas_empleado_listar_empleado where fk_idpersona="+id;
            cn = Coneccion.getConexion();
            cl = cn.prepareStatement(call);          
            //La sentencia lo almacenamos en un resulset           
            rs = cl.executeQuery();
            //Consultamos si hay datos para recorrerlo
            //e insertarlo en nuestro array
            while (rs.next()) {                
                v.setIdempleado(rs.getInt(1));
                v.setFk_idcargo(rs.getInt(2));
                v.setFk_idpersona(rs.getInt(3));                
            }
           
        } catch (SQLException e) {
            e.printStackTrace();
            Coneccion.deshacerCambios(cn);
            Coneccion.cerrarConexion(cn);            
        } catch (Exception e) {
             e.printStackTrace();
            Coneccion.deshacerCambios(cn);
            Coneccion.cerrarConexion(cn);           
        }finally {
            try {
                 rs.close();
                cl.close();
                cn.close();
            } catch (Exception ex) {
            }
        }
        return v;
    }
}
